CREATE PROCEDURE dbo.sp_RepRecepcion_Detalle

-- Parametros

@SeleccionFechas int ,	-- 1 = NO , 2 = SI
@FechaDesde varchar(30) ,
@FechaHasta varchar(30) ,
@Expediente varchar(20) ,
@Num_Copia_Chr varchar(5) , 
@Consecutivo int ,
@Resolucion varchar(20) , 
@Oficio varchar(50) , 
@Procurador int , 
@Area int , 
@ZonaJuzgado int ,
@SubZonaJuzgado int ,
@ConsecutivoJuzgado int ,
@Parte varchar(200) 

AS

DECLARE
@Num_Copia int , 
@FechaInicial datetime ,
@FechaFinal datetime  
SET @Num_Copia = CONVERT( SMALLINT , @Num_Copia_Chr ) 
SET @FechaInicial = CONVERT( DATETIME , LEFT( @FechaDesde , 10 ) + ' 00:00:00' , 121 ) 
SET @FechaFinal   = CONVERT( DATETIME , LEFT( @FechaHasta , 10 ) + ' 23:59:00' , 121 ) 

-------------------------------------------------------------------------
-- PASO 1 : Preselecciona las Notificaciones para acelerar la consulta --
-------------------------------------------------------------------------
SELECT 	f.Expediente , 
	f.fecha_pgr , 
	f.Num_Copia , 
	f.Consecutivo , 
	f.Resolucion , 
	f.NunOficio , 
	f.Con_Copias_Chk , 
	f.CORTEL_Chk , 
	f.Transmitida_Chk , 
	Actualizado_Por = v2.Nombre_Funcionario , 
	f.Asociado
INTO	#Notificaciones
FROM 	Exp_Fecha AS f 
	INNER JOIN View_Funcionarios AS v2 
		ON v2.Cedula = f.Cedula_Usuario 
WHERE 	f.Fecha_PGR BETWEEN CASE @SeleccionFechas
				WHEN 1 THEN f.Fecha_PGR
				ELSE @FechaInicial
				END
			AND CASE @SeleccionFechas
				WHEN 1 THEN f.Fecha_PGR
				ELSE @FechaFinal
				END

	AND f.expediente LIKE CASE LEN( @Expediente ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN f.expediente
					ELSE '%' + @Expediente + '%'
					END

	AND f.Num_Copia = CASE LEN( @Num_Copia_Chr ) 
				WHEN 0 THEN f.Num_Copia 
				ELSE @Num_Copia
				END

	AND f.Consecutivo = CASE @Consecutivo
				WHEN 0 THEN f.Consecutivo 
				ELSE @Consecutivo
				END

	AND f.Resolucion LIKE CASE LEN( @Resolucion )
					WHEN 0 THEN f.Resolucion 
					ELSE '%' + @Resolucion  + '%'
					END

	AND f.NunOficio LIKE CASE LEN( @Oficio )
					WHEN 0 THEN f.NunOficio 
					ELSE '%' + @Oficio  + '%'
					END

----------------------------------------------------------------------
-- PASO 2 : Preselecciona los Expedientes para acelerar la consulta --
----------------------------------------------------------------------
IF LEN( @Expediente ) > 0 
OR LEN( @Parte ) > 0
OR @Procurador > 0
OR @Area > 0
OR @ZonaJuzgado > 0
	SELECT 	e.Expediente , 
		x.Procurador , 
		v.Nombre_Procurador , 
		Parte = LEFT( 
			CASE
			WHEN LEN( COALESCE( e.Promovente , '' ) ) = 0 AND LEN( COALESCE( e.Parte , '' ) ) = 0 THEN ''
			WHEN LEN( COALESCE( e.Promovente , '' ) ) = 0 AND LEN( COALESCE( e.Parte , '' ) ) > 0 THEN E.Parte
			WHEN LEN( COALESCE( e.Promovente , '' ) ) > 0 AND LEN( COALESCE( e.Parte , '' ) ) = 0 THEN E.Promovente
			ELSE e.Promovente + ' CONTRA ' + e.Parte
			END 
			, 40 ) , 
		e.Juzgado , 
		Nombre_Juzgado = j.Nombre 
	INTO	#Expedientes
	FROM 	Expediente AS e  
		INNER JOIN Procuradores_X_Expediente AS x 
			ON e.expediente = x.expediente AND x.primario_chk = '1' 
		INNER JOIN View_Nombre_Procuradores v
			ON x.procurador = v.procurador 
		INNER JOIN Juzgados AS j 
			ON e.juzgado = j.juzgado 
		INNER JOIN Area AS a 
			ON x.area = a.area 
	WHERE 	-- el Expediente es buscado tanto en la columna Expediente como en la columna Equivale_A por acumulacion de expedientes
		(
			e.expediente LIKE CASE LEN( @Expediente ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN e.expediente
					ELSE '%' + @Expediente + '%'
					END
			OR
			e.Equivale_A LIKE CASE LEN( @Expediente ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN e.Equivale_A 
					ELSE '%' + @Expediente + '%'
					END
		)
		
		AND x.Procurador = CASE @Procurador
					WHEN -1 THEN x.Procurador 
					ELSE @Procurador
					END
		
		AND x.area = CASE @Area
			WHEN -1 THEN x.area 
			ELSE @Area
			END
		
		AND e.juzgado - (e.juzgado % 10000) = 
			CASE @ZonaJuzgado
				WHEN -1 THEN e.juzgado - (e.juzgado % 10000) 
				ELSE @ZonaJuzgado * 10000
				END
		
		AND (e.juzgado % 10000)/100 = 
			CASE @SubZonaJuzgado
				WHEN -1 THEN (e.juzgado % 10000)/100 
				ELSE @SubZonaJuzgado 
				END
		
		AND (e.juzgado % 10000) % 100 = 
			CASE @ConsecutivoJuzgado
				WHEN -1 THEN (e.juzgado % 10000) % 100 
				ELSE @ConsecutivoJuzgado
				END
		
		AND (
			e.Promovente LIKE CASE LEN( @Parte ) -- blancos no son tomados como valor significativo
					WHEN 0 THEN e.Promovente 
					ELSE '%' + @Parte + '%'
					END
			OR
			e.parte LIKE CASE LEN( @Parte ) -- blancos no son tomados como valor significativo
				WHEN 0 THEN e.parte
				ELSE '%' + @Parte + '%'
				END
		     )

---------------------------------------------------------------------------------------
-- PASO 3 : Genera la consulta con los Expedientes y Notificaciones preseleccionadas --
---------------------------------------------------------------------------------------
IF LEN( @Expediente ) > 0 
OR LEN( @Parte ) > 0
OR @Procurador > 0
OR @Area > 0
OR @ZonaJuzgado > 0
	SELECT 	n.fecha_pgr , 
		n.Num_Copia , 
		n.Consecutivo , 
		n.Resolucion , 
		n.NunOficio , 
		e.Expediente , 
		Copias = CASE n.con_copias_chk 
			WHEN '0' THEN '-' 
			ELSE 'SI' 
			END , 
		Cortel = CASE n.cortel_chk 
			WHEN '0' THEN '-' 
			ELSE 'SI' 
			END , 
		Transmitida = CASE n.transmitida_chk 
			WHEN '0' THEN '-' 
			WHEN '1' THEN 'Fax' 
			WHEN '2' THEN 'Email' 
			WHEN '3' THEN 'Tel' END ,
		e.Procurador , 
		e.Nombre_Procurador , 
		e.Parte , 
		e.Juzgado , 
		e.Nombre_Juzgado , 
		n.Actualizado_Por  , 
		n.Asociado
	FROM 	#Notificaciones AS n 
		INNER JOIN #Expedientes AS e  
			ON e.expediente = n.expediente 
	ORDER BY n.fecha_pgr DESC, 
		e.Nombre_Procurador , 
		n.Consecutivo DESC
ELSE
	SELECT 	n.fecha_pgr , 
		n.Num_Copia , 
		n.Consecutivo , 
		n.Resolucion , 
		n.NunOficio , 
		e.Expediente , 
		Copias = CASE n.con_copias_chk 
			WHEN '0' THEN '-' 
			ELSE 'SI' 
			END , 
		Cortel = CASE n.cortel_chk 
			WHEN '0' THEN '-' 
			ELSE 'SI' 
			END , 
		Transmitida = CASE n.transmitida_chk 
			WHEN '0' THEN '-' 
			WHEN '1' THEN 'Fax' 
			WHEN '2' THEN 'Email' 
			WHEN '3' THEN 'Tel' END ,
		x.Procurador , 
		v.Nombre_Procurador , 
		Parte = LEFT( 
			CASE
			WHEN LEN( COALESCE( e.Promovente , '' ) ) = 0 AND LEN( COALESCE( e.Parte , '' ) ) = 0 THEN ''
			WHEN LEN( COALESCE( e.Promovente , '' ) ) = 0 AND LEN( COALESCE( e.Parte , '' ) ) > 0 THEN E.Parte
			WHEN LEN( COALESCE( e.Promovente , '' ) ) > 0 AND LEN( COALESCE( e.Parte , '' ) ) = 0 THEN E.Promovente
			ELSE e.Promovente + ' CONTRA ' + e.Parte
			END 
			, 40 ) , 
		e.Juzgado , 
		Nombre_Juzgado = j.Nombre , 
		n.Actualizado_Por   , 
		n.Asociado
	FROM 	#Notificaciones AS n 
		INNER JOIN Expediente AS e  
			ON e.expediente = n.expediente 
		INNER JOIN Procuradores_X_Expediente AS x 
			ON e.expediente = x.expediente AND x.primario_chk = '1' 
		INNER JOIN View_Nombre_Procuradores v
			ON x.procurador = v.procurador 
		INNER JOIN Juzgados AS j 
			ON e.juzgado = j.juzgado 
		INNER JOIN Area AS a 
			ON x.area = a.area 
	ORDER BY n.fecha_pgr DESC, 
		v.Nombre_Procurador , 
		n.Consecutivo DESC
